Platform Explorer / Nuxeo Platform 2023.10

Extension point directories

Documentation

This extension point can be used to register new SQL-based directories. The extension can contain any number of directories declarations of the form:

    <directory name="userDirectory">
        <schema>vocabulary</schema>
        <types>
            <type>system</type>
        </types>
        <dataSource>java:/nxsqldirectory</dataSource>
        <table>t</table>
        <nativeCase>false</nativeCase>
        <idField>username</idField>
        <passwordField>password</passwordField>
        <passwordHashAlgorithm>SSHA</passwordHashAlgorithm>
        <autoincrementIdField>false</autoincrementIdField>
        <createTablePolicy>on_missing_columns</createTablePolicy>
        <dataFile>setup-mydb.csv</dataFile>
        <dataFileCharacterSeparator>,</dataFileCharacterSeparator>
        <querySizeLimit>1000</querySizeLimit>
        <references>
            <tableReference dataFile="user2group.csv"
                directory="groupDirectory" field="groups"
                sourceColumn="userId" table="user2group" targetColumn="groupId"/>
        </references>
        <permissions>
            <permission name="Read">
                <group>mygroup</group>
                <group>mygroup2</group>
                <user>Administrator</user>
            </permission>
            <permission name="Write">
                <group>mygroup3</group>
            </permission>
        </permissions>
    </directory>

Here is the description for each field:

  • schema - the name of the schema to be used for the directory entries.
  • types - list of type to categorise directories.
  • dataSource - the dataSource name, as registered in the application server.
  • table - The name of the sql table where the directory data will be stored.
  • idField - the id field designs the primary key in the table, used for retrieving entries by id.
  • passwordField - the password field.
  • passwordHashAlgorithm - the hash used to encode the password written in the database, either empty (default), SSHA or SMD5.
  • autoincrementIdField - if this is set true, the SQLDirectory will fill the id field using a generated unique number, otherwise the client has to supply the id.
  • dataFile - file from which to populate the table; the first line must contain the column names. This can be a csv, tsv, psv file. But you must take care of the dataFileCharacterSeparator to specify the character separator
  • dataFileCharacterSeparator - character that separate each value if more than one character is set, the first one is gotten and other are skipped. The character is by default "," but you can set ";" or tabulation
  • createTablePolicy - one of "never", "always" or "on_missing_columns" if this is set to "never", the table will never be created; if set to "always", the table will be created each time the application is started; if set to "on_missing_columns", the table will be created only if the schema declares some fields that are not present in the sql table.
  • querySizeLimit - the maximum number of results that the queries on this directory should return; if there are more results than this, an exception will be raised.
  • nativeCase - false if table and column names should be used exactly as specificed in the configuration and schemas (quoted), true if they should be converted to database-native case (usually uppercase); the default is false for backward-compatibility.

The references tag is used to define relations between directories. (TODO: describe the references types.)

Contribution Descriptors

  • Class: org.nuxeo.ecm.directory.sql.SQLDirectoryDescriptor

Existing Contributions

Contributions are presented in the same order as the registration order on this extension point. This order is displayed before the contribution name, in brackets.

  • nuxeo-runtime-2023.10.13.jar /opt/nuxeo/server/nxserver/config/sql-template-directory-config.xml
    <extension point="directories" target="org.nuxeo.ecm.directory.sql.SQLDirectoryFactory">
    
        <directory name="template-directory" template="true">
          <dataSource>java:/nxsqldirectory</dataSource>
          <createTablePolicy>on_missing_columns</createTablePolicy>
        </directory>
    
        <directory extends="template-directory" name="template-user" template="true">
          <table>users</table>
          <computeMultiTenantId>false</computeMultiTenantId>
        </directory>
    
        <directory extends="template-directory" name="template-group" template="true">
          <table>groups</table>
        </directory>
    
      </extension>